/**
 * **************************************************************************
 *
 * @说明: 
 * @项目名称: talent-aio-examples-im-client
 *
 * @author: tanyaowu 
 * @创建时间: 2016年12月16日 下午5:52:06
 *
 * **************************************************************************
 */
package com.talent.proxy.mysql.client;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.talent.aio.client.ClientChannelContext;
import com.talent.aio.client.intf.ClientAioListener;
import com.talent.aio.common.ChannelContext;
import com.talent.proxy.mysql.client.ui.JFrameMain;
import com.talent.proxy.mysql.common.MysqlExt;
import com.talent.proxy.mysql.common.MysqlExt.SessionStatus;
import com.talent.proxy.mysql.common.MysqlPacket;
import com.talent.proxy.mysql.common.MysqlReturn;

/**
 * 
 * @author tanyaowu 
 * @创建时间 2016年12月16日 下午5:52:06
 *
 * @操作列表
 *  编号	| 操作时间	| 操作人员	 | 操作说明
 *  (1) | 2016年12月16日 | tanyaowu | 新建类
 *
 */
public class MysqlClientAioListener implements ClientAioListener<MysqlExt, MysqlPacket, MysqlReturn>
{
	private static Logger log = LoggerFactory.getLogger(MysqlClientAioListener.class);

	/**
	 * 
	 *
	 * @author: tanyaowu
	 * @创建时间:　2016年12月16日 下午5:52:06
	 * 
	 */
	public MysqlClientAioListener()
	{
	}

	/**
	 * @param args
	 *
	 * @author: tanyaowu
	 * @创建时间:　2016年12月16日 下午5:52:06
	 * 
	 */
	public static void main(String[] args)
	{
	}

	/** 
	 * @see com.talent.aio.client.intf.ClientAioListener#onAfterReconnected(com.talent.aio.common.ChannelContext)
	 * 
	 * @param channelContext
	 * @return
	 * @重写人: tanyaowu
	 * @重写时间: 2016年12月20日 上午10:17:53
	 * 
	 */
//	@Override
//	public void onAfterReconnected(ChannelContext<MysqlExt, MysqlPacket, MysqlReturn> channelContext, boolean isConnected)
//	{
//		return;
//	}


	@Override
	public void onAfterConnected(ChannelContext<MysqlExt, MysqlPacket, MysqlReturn> _channelContext, boolean isConnected, boolean isReconnect)
	{
		if (!isConnected)
		{
			return;
		}
		
		ClientChannelContext<MysqlExt, MysqlPacket, MysqlReturn> channelContext = (ClientChannelContext<MysqlExt, MysqlPacket, MysqlReturn>)_channelContext;
		
		MysqlExt mysqlExt = new MysqlExt();
		mysqlExt.setSessionStatus(SessionStatus.CLIENT_WAITING_HANDSHAKE);
		channelContext.setSessionContext(mysqlExt);
		
		com.talent.proxy.mysql.client.ui.JFrameMain jframeMain = JFrameMain.getInstance();
//		String key = ClientNodes.getKey(channelContext);
		
		
		jframeMain.getListModel().addElement(channelContext);
		jframeMain.getClients().setModel(jframeMain.getListModel());
		jframeMain.getClients().setSelectedValue(channelContext, true);
		
		log.info("tcp connected {}", channelContext.getServerNode());
		return;
	}


	@Override
	public void onAfterSent(ChannelContext<MysqlExt, MysqlPacket, MysqlReturn> channelContext, MysqlPacket packet, boolean isSentSuccess)
	{
//		CommandStat.getCount(packet.getCommand()).sent.incrementAndGet();

	}

	/** 
	 * @see com.talent.aio.common.intf.AioListener#onAfterReceived(com.talent.aio.common.ChannelContext, com.talent.aio.common.intf.Packet, int)
	 * 
	 * @param channelContext
	 * @param packet
	 * @param packetSize
	 * @重写人: tanyaowu
	 * @重写时间: 2016年12月20日 上午11:41:27
	 * 
	 */
	@Override
	public void onAfterReceived(ChannelContext<MysqlExt, MysqlPacket, MysqlReturn> channelContext, MysqlPacket packet, int packetSize)
	{
//		CommandStat.getCount(packet.getCommand()).received.incrementAndGet();

	}

	/** 
	 * @see com.talent.aio.common.intf.AioListener#onAfterClose(com.talent.aio.common.ChannelContext, java.lang.Throwable, java.lang.String)
	 * 
	 * @param channelContext
	 * @param throwable
	 * @param remark
	 * @重写人: tanyaowu
	 * @重写时间: 2017年2月1日 上午11:03:37
	 * 
	 */
	@Override
	public void onAfterClose(ChannelContext<MysqlExt, MysqlPacket, MysqlReturn> channelContext, Throwable throwable, String remark, boolean isRemove)
	{
		log.info("已经关闭连接:{}", channelContext);
		
		JFrameMain jFrameMain = JFrameMain.getInstance();
		synchronized (jFrameMain)
		{
			try
			{
				if (isRemove)
				{
					jFrameMain.getListModel().removeElement(channelContext);
				}
				
				
			} catch (Exception e)
			{

			}

//			jFrameMain.updateClientCount();
		}
	}

}
